//
// Created by Jisam on 2024/7/28 21:06.
// solve  D   小红组比赛 
#include <bits/stdc++.h>

#define PSI pair<string,int>
#define PII pair<int,int>
#define PDI pair<double,int>
#define PDD pair<double,double>
#define VVI vector<vector<int>>
#define VI vector<int>
#define VS vector<string>

#define PQLI priority_queue<int, vector<int>, less<int>>
#define PQGI priority_queue<int, vector<int>, greater<int>>
using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;

using namespace std;

constexpr int N=(1<<21)+100;
int T,n,m,a[N],b[N];
int i,j,k,l,r,x,y,z;
bitset<5005>f,g;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin>>T>>n;
    f[0]=1;

    while(T--){
        // 清空g的状态，准备计算新的状态
        g.reset();
        // 输入k并更新g的状态，g|=f<<k表示g与f左移k位后的状态进行按位或操作
        for(i=1;i<=n;++i)cin>>k,g|=f<<k;
        // 更新f为最新的状态，用于处理下一个测试用例
        f=g;
    }

    // 输入n，初始化m为一个较大的数，用于寻找最小的绝对差值
    cin>>n,m=1e9;

    // 遍历f中的每个位置，找到最小的绝对差值
    for(k=0;k<=5001;++k)
        // 如果f[k]为1，更新m为当前绝对差值和m的较小值
        if(f[k])m=min(m,abs(k-n));

    // 输出最小的绝对差值
    cout<<m;
    return 0;
}